﻿namespace Lesson_10_函数重载
{
    internal class Program
    {
        #region 知识点一 基本概念
        //重载的概念
        //在同一个类中，可以有多个名称相同的方法，只要它们的参数个数或参数类型不同即可。
        //或者 参数的数量相同 但参数类型不同或参数顺序不同。

        //作用：
        //1. 提高代码的可读性和可维护性。
        //2. 命名一组功能相似的函数，减少函数名的数量，减少代码的冗余。
        #endregion

        #region 知识点二 实例
        //注意：
        //1.重载和返回值类型无关，只和参数类型，个数，顺序相关。
        //2.调用是 程序会自己根据传入的参数类型 判断使用哪一个重载函数。
        static int CalcSum(int a, int b)
        {
            return a + b;
        }

        //参数数量不同
        static int CalcSum(int a, int b, int c)
        {
            return a + b + c;
        }

        //数量相同，类型不同
        static double CalcSum(double a, double b)
        {
            return a + b;
        }

        //数量相同，顺序不同
        static double CalcSum(double b , double a , double c)
        {
            return a + b + c;
        }

        //ref 和 out 参数
        //ref和out 可以理解成 他们也是一种变量类型 所以可以用在重载中 但是 ref和out不能同时修饰
        static float CalcSum(ref float f, int a)
        {
            return f + a;
        }
        static float CalcSum(int a, int b, params int[] arr)
        {
            return 1;
        }
        #endregion

        //总结：
        //概念：重载是指在同一个类中，可以有多个名称相同的方法，只要它们的参数个数或参数类型或顺序不同即可
        //注意：重载和返回值类型无关，只和参数类型，个数，顺序相关
        //作用：1. 提高代码的可读性和可维护性。 2. 命名一组功能相似的函数，减少函数名的数量，减少代码的冗余。
        //一般用来处理不同参数的同一类型的逻辑处理

        #region 练习题
        static int GetMax(params int[] arr)
        {
            if( arr.Length == 0)
            {
                Console.WriteLine("数组为空");
                return 0;
            }
            int max = arr[0];
            for(int i = 1; i < arr.Length; i++)
            {
                if(arr[i] > max)
                {
                    max = arr[i];
                }
            }
            return max;
        }
        #endregion
        static void Main(string[] args)
        {
            Console.WriteLine("重载");

            Console.WriteLine(GetMax(1,2,4,5,6));
        }
    }
}
